package com.system.manager.common.aspect;

import com.system.manager.common.entity.Result;
import com.system.manager.common.exception.SysException;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @Classname SysExceptionHandler
 * @Description TODO 捕获SysException异常，SysException主要是捕获数据库操作时出现的异常,暂未使用
 * @Date 2021/11/10 14:48
 * @Created by 杨小鹏：【241960695@qq.com】
 */
//@Component
//@Aspect
@Slf4j
public class SysExceptionHandler {

    // 捕获service层
    @Pointcut("execution(* com.system.manager.modules.*.service.impl.*.*(..))")
    public void logPointCut() {

    }

    @Around("logPointCut()")
    public Object aroundLogging(ProceedingJoinPoint joinPoint){
        Object result = new Object();
        // 对service进行全局捕获，不用在controller进行try catch了
        try {
            log.info("---->开始了捕获当前service异常.....");
            result=joinPoint.proceed();

        }catch (SysException sysException){
            sysException.printStackTrace();

            return Result.error(sysException);
        }catch (Throwable throwable) {
            throwable.printStackTrace();
            throw new SysException();
        }

        return result;
    }
}
